Validation
PHP:7.2
Laravel:5.7
在實務上,所有傳進 Controller 的參數都應該是被限制的,這樣才不會造成資安或不可預期的錯誤。
除了傳統一個一個驗證之外,Laravel 也有提供許多關於 Validation 的用法。
Notice: 各型態規則的設定方式可以詳見官網。
Controller Validation
利用 Request 的 validate 方法進行驗證,如果失敗網頁會被導出。
範例
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
public function doc(Request $request)
{
// required 為必填
$validatedData = $request->validate([
'title' => 'required|max:255',
'body' => 'required',
]);
dd($validatedData);
}
}
以下列幾個常用的規則讓大家參考: Name |
Description |
---|---|
required | 驗證欄位一定要有值,不能為空 |
present | 驗證欄位一定要有值,可以為空 |
filled | 驗證欄位存在時,不能為空值 |
nullable | 驗證欄位可以是 null |
Validator Class
如果需要更細致一點的操作,可以使用 Validator Class
。
範例
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Validator;
class TestController extends Controller
{
public function doc(Request $request)
{
// 第一個參數是欄位與值(可以直接代入 $request->all())
// 第二個參數是 rules
$validator = Validator::make([
'name' => 'Johnson'
], [
'name' => 'required|min:5'
]
);
// 驗證失敗
if ($validator->fails()) {
return response()->json([
'message' => 'Parameters Error',
'errors' => $validator->errors()
], 400);
}
}
}
Form Request Validation
如果是大量使用的認證規則,可以選擇建立一個 Request Rule
。
首先先透過 Artisan
建立一個 Request
:
php artisan make:request DocValidation
再去修改 Request
相關設定和規則:
app/Http/Requests/DocValidation.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class DocValidation extends FormRequest
{
public function authorize()
{
// 這裡可以做一些身份認證的事
// 不需身份認證可以直接 return true
return true;
}
public function rules()
{
return [
'name' => 'required|min:5'
];
}
}
Controller
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\DocValidation;
class TestController extends Controller
{
public function doc(DocValidation $request)
{
// 如果失敗也會被導出
$validatedData = $request->validated();
dd($validatedData);
}
}